package Controladores;

import Dao.UsuarioJpaController;
import Dao.exceptions.IllegalOrphanException;
import Dao.exceptions.NonexistentEntityException;
import Dao.exceptions.PreexistingEntityException;
import Logico.Usuario;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

public class ControladorUsuario {

    UsuarioJpaController daoUsuario;
    ConnectionFactory conection;

    public ControladorUsuario() {

        conection = new ConnectionFactory();
        daoUsuario = new UsuarioJpaController(conection.getFactory());
    }

    public boolean guardar(int cedula, String nombre, String apellidos, String rol, String contrasena) {

        boolean guardado = false;

        Usuario usuario = new Usuario();
        usuario.setCedula(cedula);
        usuario.setNombre(nombre);
        usuario.setApellidos(apellidos);
        usuario.setRol(rol);
        usuario.setContrasena(contrasena);

        try {
            daoUsuario.create(usuario);
            guardado = true;

        } catch (PreexistingEntityException ex) {
            JOptionPane.showMessageDialog(null, "Ya existe un Usuario con la cedula: " + cedula + ". Por favor inténtelo de nuevo");
        } catch (Exception ex) {
            Logger.getLogger(ControladorUsuario.class.getName()).log(Level.SEVERE, null, ex);
        }

        return guardado;
    }

    public boolean borrar(int cedula) {

        boolean borrado = false;

        try {

            daoUsuario.destroy(cedula);
            borrado = true;
        } catch (IllegalOrphanException ex) {
            Logger.getLogger(ControladorUsuario.class.getName()).log(Level.SEVERE, null, ex);
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(ControladorUsuario.class.getName()).log(Level.SEVERE, null, ex);
        }

        return borrado;
    }

    public boolean modificar(int cedula, String nombre, String apellidos, String rol, String contrasena) {

        boolean modificado = false;

        Usuario usuarioEncontrado = this.buscar(cedula);

        if (usuarioEncontrado != null) {

            usuarioEncontrado.setNombre(nombre);
            usuarioEncontrado.setApellidos(apellidos);
            usuarioEncontrado.setRol(rol);
            usuarioEncontrado.setContrasena(contrasena);

            try {

                daoUsuario.edit(usuarioEncontrado);
                modificado = true;
            } catch (IllegalOrphanException ex) {
                Logger.getLogger(ControladorUsuario.class.getName()).log(Level.SEVERE, null, ex);
            } catch (NonexistentEntityException ex) {
                Logger.getLogger(ControladorUsuario.class.getName()).log(Level.SEVERE, null, ex);
            } catch (Exception ex) {
                Logger.getLogger(ControladorUsuario.class.getName()).log(Level.SEVERE, null, ex);
            }

        } else {
            JOptionPane.showMessageDialog(null, "El Usuario no se encuentra en nuestro sistema.");
        }

        return modificado;
    }

    public Usuario buscar(int cedula) {

        return daoUsuario.findUsuario(cedula);
    }

    public List<Usuario> listarUsuarios() {

        return daoUsuario.findUsuarioEntities();
    }
}
